using JT808Protocol.Common;
using JT808Protocol.Models.Attributes;
using System.Text.Json.Serialization;

namespace JT808Protocol.Models.BodyParserStrategy.Location
{
    /// <summary>
    /// 设备状态位信息
    /// </summary>
    public class DeviceStatusBits
    {
        /// <summary>
        /// 0：ACC关；1：ACC开
        /// </summary>
        [JsonPropertyName("ACC")]
        [JsonBooleanString("On", "Off")]
        public bool ACCStatus { get; set; }

        /// <summary>
        /// 0：未定位；1：定位
        /// </summary>
        [JsonPropertyName("定位")]
        [JsonBooleanString("On", "Off")]
        public bool IsLocating { get; set; }

        /// <summary>
        /// 0：北纬；1：南纬
        /// </summary>
        [JsonPropertyName("北纬|南纬")]
        [JsonBooleanString("南纬", "北纬")]
        public bool LatitudeType { get; set; }

        /// <summary>
        /// 0：东经；1：西经
        /// </summary>
        [JsonPropertyName("东经|西经")]
        [JsonBooleanString("西经", "东经")]
        public bool LongitudeType { get; set; }

        /// <summary>
        /// 0：运营状态；1：停运状态
        /// </summary>
        [JsonPropertyName("运营状态")]
        [JsonBooleanString("停运", "运营中")]
        public bool BusinessStatus { get; set; }

        /// <summary>
        /// 0：经纬度未经保密插件加密；1经纬度已经过保密插件加密
        /// </summary>
        [JsonPropertyName("经纬度是否已经过保密插件加密")]
        [JsonBooleanString]
        public bool LaLoEncryptStatus { get; set; }

        /// <summary>
        /// 0：车辆油路正常；1：车辆油路断开
        /// </summary>
        [JsonPropertyName("车辆油路")]
        [JsonBooleanString("断开", "正常")]
        public bool VehicleOilStatus { get; set; }

        /// <summary>
        /// 0：车辆电路正常；1：车辆电路断开
        /// </summary>
        [JsonPropertyName("车辆电路")]
        [JsonBooleanString("断开", "正常")]
        public bool VehiclePowerStatus { get; set; }

        /// <summary>
        /// 0：车门解锁；1：车门加锁
        /// </summary>
        [JsonPropertyName("车门")]
        [JsonBooleanString("加锁", "解锁")]
        public bool IsVehicleDoorLocked { get; set; }

        /// <summary>
        /// 0：门 1 关；1：门 1 开（前门）
        /// </summary>
        [JsonPropertyName("门1(前门)")]
        [JsonBooleanString("开", "关")]
        public bool IsDoor1Opened { get; set; }

        /// <summary>
        /// 0：门 2 关；1：门 2 开（中门）
        /// </summary>
        [JsonPropertyName("门2(中门)")]
        [JsonBooleanString("开", "关")]
        public bool IsDoor2Opened { get; set; }

        /// <summary>
        /// 0：门 3 关；1：门 3 开（后门）
        /// </summary>
        [JsonPropertyName("门3(后门)")]
        [JsonBooleanString("开", "关")]
        public bool IsDoor3Opened { get; set; }

        /// <summary>
        /// 0：门 4 关；1：门 4 开（驾驶席门）
        /// </summary>
        [JsonPropertyName("门4(驾驶席门)")]
        [JsonBooleanString("开", "关")]
        public bool IsDoor4Opened { get; set; }

        /// <summary>
        /// 0：门 5 关；1：门 5 开（自定义）
        /// </summary>
        [JsonPropertyName("门5(自定义)")]
        [JsonBooleanString("开", "关")]
        public bool IsDoor5Opened { get; set; }

        /// <summary>
        /// 0：未使用 GPS 卫星进行定位；1：使用 GPS 卫星进行定位
        /// </summary>
        [JsonPropertyName("使用GPS卫星进行定位")]
        [JsonBooleanString]
        public bool UsedGps { get; set; }

        /// <summary>
        /// 0：未使用北斗卫星进行定位；1：使用北斗卫星进行定位
        /// </summary>
        [JsonPropertyName("使用北斗卫星进行定位")]
        [JsonBooleanString]
        public bool UsedBds { get; set; }

        /// <summary>
        /// 解析状态位
        /// </summary
        public void ReadStatus(uint status)
        {
            //0：ACC关；1：ACC开
            ACCStatus = ParseHelper.Bit(status, 0);
            //0：未定位；1：定位
            IsLocating = ParseHelper.Bit(status, 1);
            //0：北纬；1：南纬
            LatitudeType = ParseHelper.Bit(status, 2);
            //0：东经；1：西经
            LongitudeType = ParseHelper.Bit(status, 3);
            //0：运营状态；1：停运状态
            BusinessStatus = ParseHelper.Bit(status, 4);
            //0：经纬度未经保密插件加密；1经纬度已经过保密插件加密
            LaLoEncryptStatus = ParseHelper.Bit(status, 5);
            //0：车辆油路正常；1：车辆油路断开
            VehicleOilStatus = ParseHelper.Bit(status, 10);
            //0：车辆电路正常；1：车辆电路断开
            VehiclePowerStatus = ParseHelper.Bit(status, 11);
            //0：车门解锁；1：车门加锁
            IsVehicleDoorLocked = ParseHelper.Bit(status, 12);
            //0：门 1 关；1：门 1 开（前门）
            IsDoor1Opened = ParseHelper.Bit(status, 13);
            //0：门 2 关；1：门 2 开（中门）
            IsDoor2Opened = ParseHelper.Bit(status, 14);
            //0：门 3 关；1：门 3 开（后门）
            IsDoor3Opened = ParseHelper.Bit(status, 15);
            //0：门 4 关；1：门 4 开（驾驶席门）
            IsDoor4Opened = ParseHelper.Bit(status, 16);
            //0：门 5 关；1：门 5 开（自定义）
            IsDoor5Opened = ParseHelper.Bit(status, 17);
            //0：未使用 GPS 卫星进行定位；1：使用 GPS 卫星进行定位
            UsedGps = ParseHelper.Bit(status, 18);
            //0：未使用北斗卫星进行定位；1：使用北斗卫星进行定位
            UsedBds = ParseHelper.Bit(status, 19);
        }
    }
}